/*
 * @Author: 13177709051 3506463075@qq.com
 * @Date: 2024-11-23 11:18:26
 * @LastEditors: 13177709051 3506463075@qq.com
 * @LastEditTime: 2024-11-23 14:39:40
 * @FilePath: /linux35/LockGuard.hpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#pragma once

#include <pthread.h>

class LockGuard
{
public:
    LockGuard(pthread_mutex_t *mutex):_mutex(mutex)
    {
        pthread_mutex_lock(_mutex);
    }
    ~LockGuard()
    {
        pthread_mutex_unlock(_mutex);
    }
private:
    pthread_mutex_t *_mutex;
};

// 构造函数 LockGuard(pthread_mutex_t *mutex)
// 构造函数接收一个 pthread_mutex_t* 类型的指针作为参数，并在构造时通过 pthread_mutex_lock 来锁定该互斥量。
// mutex 参数是指向一个 pthread_mutex_t 类型的指针，这个互斥量将用来保护临界区。
// _mutex(mutex) 是初始化成员变量 _mutex 的成员初始化列表，它将构造函数的参数 mutex 的值赋给 _mutex 成员变量。
// pthread_mutex_lock(_mutex) 调用会尝试锁定互斥量 _mutex。如果互斥量已经被其他线程锁定，当前线程会被阻塞，直到该互斥量变为可用。
// 析构函数 ~LockGuard()
// 析构函数负责在 LockGuard 对象生命周期结束时自动解锁互斥量。
// 当 LockGuard 对象的作用域结束时，析构函数会自动被调用。
// pthread_mutex_unlock(_mutex) 会释放锁，即解锁互斥量。这样可以确保即使在发生异常或提前返回的情况下，互斥量也能被正确解锁，从而避免死锁。
// 成员变量 _mutex
// _mutex 是一个指向 pthread_mutex_t 类型的指针，它保存了传递给构造函数的互斥量地址。这个指针将用于在构造和析构中对互斥量进行锁定和解锁操作。
// 关键特点：
// 自动锁定：当 LockGuard 对象被创建时，构造函数自动锁定互斥量。
// 自动解锁：当 LockGuard 对象超出作用域时，析构函数自动解锁互斥量。
// 简化代码：使用 LockGuard 类可以避免手动调用 pthread_mutex_lock 和 pthread_mutex_unlock，并且保证解锁操作一定会发生。